package com.joysuch.wwyt.patrol.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.joysuch.wwyt.patrol.entity.PatrolTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joysuch.wwyt.patrol.entity.bean.AppSynthesizeBean;
import com.joysuch.wwyt.patrol.entity.bean.TaskRecordSearchBean;
import com.joysuch.wwyt.patrol.entity.bean.TaskSearchBean;
import com.joysuch.wwyt.patrol.entity.dto.AppCheckPointDto;
import com.joysuch.wwyt.patrol.entity.dto.AppTaskDto;
import com.joysuch.wwyt.patrol.entity.dto.WebTaskDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author heqifeng
 * @since 2022-02-28
 */
@Repository
public interface PatrolTaskMapper extends BaseMapper<PatrolTask> {

    /**
     * app 任务页面
     *
     * @param page
     * @param startTime
     * @param endTime
     * @param userId
     * @return
     */
    Page<AppTaskDto> selectTaskByUserAndDate(Page<AppTaskDto> page, Date startTime, Date endTime, Long userId);

    /**
     * web 任务页面
     */
    Page<WebTaskDto> selectTask(Page page, @Param("authDeparts") Set<Long> authDeparts, @Param("searchBean") TaskSearchBean searchBean);

    Page<WebTaskDto> selectNewTask(Page page, @Param("authDeparts") Set<Long> authDeparts, @Param("searchBean") TaskSearchBean searchBean);


    /**
     * 查找已完成的任务列表
     * 按姓名查找，如果任务有完成人，即查询任务完成人。任务无完成人（未检）时查询任务分配人
     *
     * @param userId
     * @return
     */
    Page<WebTaskDto> selectFinishTask(Page<WebTaskDto> page, @Param("userId") Long userId, @Param("authDeparts") Set<Long> authDeparts, @Param("searchBean") TaskRecordSearchBean searchBean);


    Integer selectFinishTaskCount( @Param("userId") Long userId, @Param("authDeparts") Set<Long> authDeparts, @Param("searchBean") TaskRecordSearchBean searchBean);

    /**
     * 查询任务下的检查点
     * 注意检查点的禁用状态（point.status = '1'）
     *
     * @param taskId
     * @return
     */
    List<AppCheckPointDto> selectCheckPointByTask(Long taskId);

    List<AppCheckPointDto> selectCheckPointByNfcCode(@Param("nfcCode") String nfcCode, @Param("userId") Long userId);

    Integer countRecord(Long taskId);

    Integer countUnCheckPointByTask(Long taskId);

    /**
     * 查询任务下未发起治理的异常检查项目
     *
     * @param taskId
     * @return
     */
    Integer countUnRepairItem(Long taskId);

    /**
     * 查询任务下发起隐患治理，但流程未结束的检查项目
     *
     * @param taskId
     * @return
     */
    Integer countUnRepairFinishItem(Long taskId);

    List<String> selectExceptInfos(Long taskId);

    List<Long> getPointIdsByTaskId(Long taskId, Boolean finishFlag);

    Long findLastTaskId(Long planId);

    Integer batchInsert(@Param("list") List<PatrolTask> taskList);

    Page<AppSynthesizeBean> synthesizeTask(Page<AppSynthesizeBean> page,@Param("userId") Long userId, @Param("patrolStatus") String patrolStatus,
                                          @Param("investigateStatus") String investigateStatus,@Param("startTime") Date startTime,@Param("current") Date current,
                                           @Param("endTime") Date endTime,
                                           @Param("morrow") Date morrow,@Param("category") Integer category, @Param("way") Boolean way, Integer status, @Param("nextDateStartTime") Date nextDateStartTime);
}
